[GitHub] ルールセットで指定の GitHub Actions ジョブのステータスチェックをマージ条件にする
こんにちは、製造ビジネステクノロジー部の若槻です。
GitHub でブランチやタグを保護できる機能である ルールセット では、GitHub Actions などのステータスチェックのパスを必須とするルールを設定できます。
ステータスチェックを必須化させる方法は以前にこちらの DevelopersIO ブログで紹介されていましたが、現在はメニュー等に若干のアップデートがあったため、本記事で再度ご紹介をします。
ルールセットとは
しばらくの間ベータ提供だったルールセット(Rulesets)ですが、2023 年 7 月に一般提供されました。
※ちなみにルールセットは「リポジトリルール(Repository rules)」とも言うらしいが、この名称はドキュメントではあまり使われていない。
今までも「ブランチ保護(Protected branch)」機能はありましたが、ルールセットではより柔軟な設定により様々なユースケースに対応するルールを作成可能となっています。
ルールセットでステータスチェックを必須化する
ルールセットは[Settings > Rules > Rulesets]から管理できます。
作成されたルールセットです。ルールをバイパスする条件やターゲットなるブランチを柔軟に設定できます。
そしてブランチ保護用のルールをいくつかの選択肢からオプションでルールセットに適用でき、このうち[Require status checks to pass]を設定することによりステータスチェックを必須化できます。
まずは下記のような check1
および check2
という名前のジョブを持つ GitHub Actions ワークフローでステータスチェックを設定してみます。check1
は必ず失敗するようにしています。
name: Pull Request Status Check on: pull_request: types: - opened - synchronize - reopened jobs: check1: runs-on: ubuntu-latest steps: - name: something test1 run: exit 1 check2: runs-on: ubuntu-latest steps: - name: something test2 run: exit 0
さてルールセットの[Require status checks to pass]メニューを設定する際には過去のチェック実行履歴を検索して、その中から必要なステータスチェックを選択できます。現状は上記のワークフローが未実行なので check1
および check2
は選択できません。
Pull Request を作成してワークフローを実行させます。この時点ではステータスチェックを必須化していないので、一部のステータスチェックが失敗していいてもマージは可能です。
再度[Require status checks to pass]メニューからチェック履歴を検索すると、今度は check1
および check2
が選択可能になっています。
check1
および check2
を必須のステータスチェックとして設定しました。ルールセットを忘れずに保存します。
Pull Request に戻ると、ステータスチェックに Required マークが表示され、またマージボタンが無効化されており、GitHub Actions ジョブのステータスチェックがパスしていることがマージ条件として必須化されていることが確認できました。
その他
ステータスチェックのソースが不安定な場合がある
[Require status checks to pass]メニューで、GitHub Actions のジョブをステータスチェックに指定した場合はソースとして GitHub Actions
と表示されますが、たまに一部もしくは全部が Any source
と表示されることがありました。
ブランチ保護の挙動自体には影響はないようですが、メニュー上での表示が不安定となる場合があるようです。
実行履歴に無いステータスチェックも追加は可能
先ほどの例では、check1
および check2
というステータスチェックが実行履歴に存在しているため、それらを選択することができました。しかし実行履歴に無いステータスチェックも条件として追加することは可能です。
[Require status checks to pass]メニューで check3
というステータスチェックを検索するとヒットはしませんが Any source として追加することは可能です。
この時点で check3
というステータスチェックは条件ではあるが実際には存在しないため、他の必須のステータスチェックがパスした場合でもマージができなくなります。
実際にワークフローにジョブとして実際に check3
を追加します。
jobs: check1: runs-on: ubuntu-latest steps: - name: something test1 run: exit 0 check2: runs-on: ubuntu-latest steps: - name: something test2 run: exit 0 check3: runs-on: ubuntu-latest steps: - name: something test3 run: exit 0
Pull Request を改めて作成すると、check3
が追加されたことでマージが可能となりました。
おわりに
GitHub のルールセットで指定の GitHub Actions ジョブのステータスチェックをマージ条件にする方法をご紹介しました。
チームで開発をする際には、コードの品質を保つためにステータスチェックを必須化することは非常に重要です。ぜひご活用ください。
以上